#include <REGX52.H>
#include "timer.c"
#include "uart.c"

/**
 * 初始状态：LED熄灭。
 * 按下按键时，LED立即点亮。释放按键后，LED持续亮5秒后自动熄灭。
 * 如果LED没有熄灭时，按键按下，重置5秒时间
 */

void delay_ms(unsigned int ms)
{
    unsigned int i, j;
    for (i = 0; i < ms; i++)
    {
        for (j = 0; j < 123; j++)
            ;
    }
}

sbit BTN = P2 ^ 6;
sbit LED = P2 ^ 0;

bit is_led_on = 0;
volatile unsigned int led_light_count = 0;
#define LED_COUNT_MAX 500

/**
 * 当没有按键按下，返回0xFF
 * 按下返回0
 */
unsigned char btn_scan()
{
    if (BTN == 0)
    {
        delay_ms(20);
        if (BTN == 0)
        {
            while (BTN == 0)
                ;
            return 0;
        }
    }
    return 0xFF;
}

void time0_ISR() interrupt 1
{
    // 11.0592  10ms
    TH0 = 0xDB;
    TL0 = 0xFF;
    if (is_led_on)
    {
        led_light_count++;
    }
}

void main()
{
    uart_init();
    timer0_init();
    timer0_isr_on();
    LED = 0;
    while (1)
    {
        if (btn_scan() != 0xFF)
        {
            // 1. 初始状态，LED灯灭。
            // 按下后LED灯亮，开始5秒倒计时
            if (!is_led_on)
            {
                is_led_on = 1;
                LED = 1;
            }
            else
            {
                // 2. 在LED已经亮的情况下
                // 重置5秒倒计时
                led_light_count = 0;
            }
        }

        if (is_led_on)
        {
            printf("%d\n", (int)led_light_count);
            if (led_light_count > LED_COUNT_MAX)
            {
                is_led_on = 0;
                LED = 0;
                led_light_count = 0;
            }
        }
    }
}